package br.com.esporte.negocios.entidade.imp;

import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.com.esporte.negocios.entidade.util.IEsporteEnum;

/**
 * @author Milton Domingues
 */
@Entity
@Table(name = "grupo")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Grupo extends Entidade {

	private static final long serialVersionUID = 5956030409917985700L;

	@Basic
	@Column(length = 100)
	private String nome;

	@Basic
	private Boolean atletaFora;

	@Basic
	@Column(length = 100)
	private String descricao;

	@ManyToOne
	@JoinColumn(name = "grupo_presidente")
	private Usuario presidente;

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name="grupo_usuario", joinColumns=@JoinColumn(name="grupo_id"), inverseJoinColumns=@JoinColumn(name="usuario_id"))
	private List<Usuario> usuarios;

	public Grupo() {

	}

	public Boolean getAtletaFora() {
		return this.atletaFora;
	}

	public String getDescricao() {
		return this.descricao;
	}

	public String getNome() {
		return this.nome;
	}

	public Usuario getPresidente() {
		return this.presidente;
	}

	public abstract IEsporteEnum getTipo();

	public List<Usuario> getUsuarios() {
		return this.usuarios;
	}

	public void setAtletaFora(Boolean atletaFora) {
		this.atletaFora = atletaFora;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setPresidente(Usuario presidente) {
		this.presidente = presidente;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

}
